package com.awg.studyplan.excel.exp2read.jxl;

import java.io.File;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

/**
 * JXL方式创建Excel文件
 * 
 * @author AWG
 * @date 2020-02-14
 * @version 1.0
 */
public class JXLExpExcel {
    public static void main(String[] args) {

        /**
         * 定义表头，表头名称使用数组存放
         */
        String[] title = { "学号", "姓名", "性别" };
        try {
            /**
             * 创建一个Excel文件
             */
            File file = new File(System.getProperty("user.home") + File.separatorChar + "Desktop" + File.separatorChar + "jxl_exp_excel.xls");
            if (!file.exists()) {
                file.createNewFile();
            } else {
                file.delete();
            }
            /**
             * 创建工作簿
             */
            WritableWorkbook workbook = Workbook.createWorkbook(file);
            /**
             * 创建Sheet工作表
             *      createSheet(String name, int index) 
             *          name -- Sheet页的名称； 
             *          index -- 在工作簿的某个位置（索引从0开始，工作簿的第一个Sheet页的位置为0，工作簿的第二个Sheet页的位置为01，...）创建Sheet页
             */
            WritableSheet sheet = workbook.createSheet("学生信息-第1页", 0);
            // 设置默认列宽
            sheet.getSettings().setDefaultColumnWidth(60);
            // 设置默认行高
            sheet.getSettings().setDefaultRowHeight(600);
            /**
             * 向Sheet页中添加数据
             */
            Label label = null;
            /**
             * 添加表头 
             *      Label(int c, int r, String cont) 
             *          c -- 表格的列，从0开始(第一列为0，第二列为1，...)；
             *          r -- 表格的行，从0开始(第一行为0，第二行为1，...)；
             *          cont -- 表格的表头名称，即列名
             */
            for (int i = 0; i < title.length; i++) {
                label = new Label(i, 0, title[i]);
                // 为不同列设置列宽
                // sheet.setColumnView(i, (i + 1) * 20);
                sheet.addCell(label);
            }
            // 设置行高
            // sheet.setRowView(0, 1000);
            /**
             * 设置单元格样式
             */
            // 设置字体
            WritableFont font = new WritableFont(WritableFont.ARIAL, 14, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.RED);
            WritableCellFormat cellFormat = new WritableCellFormat(font);
            // 设置背景色
            cellFormat.setBackground(Colour.BLUE_GREY);
            // 设置边框,dashed虚线，dash_dot实线，dotted虚线,double双实线
            cellFormat.setBorder(Border.ALL, BorderLineStyle.DOUBLE);
            // 设置边框颜色
            cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN,Colour.SKY_BLUE);
            // 设置自换行
            cellFormat.setWrap(true);
            // 设置文字居中对齐方式
            cellFormat.setAlignment(Alignment.CENTRE);
            // 设置垂直居中
            cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            /**
             * 添加表数据，每次循环依次按列的索引来添加数据，每循环完毕一次添加一行所需数据，
             * 从{(第一列，第二行),(第二列，第二行),(第三列，第二行)}依次开始插入具体数据
             */
            for (int i = 1; i < 20; i++) {
                /**
                 * 添加【学号】列数据, 并设置样式
                 */
                label = new Label(0, i, new String("1000" + i), cellFormat);
                sheet.addCell(label);
                /**
                 * 添加【姓名】列数据
                 */
                label = new Label(1, i, "学生-" + i);
                sheet.addCell(label);
                /**
                 * 添加【性别】列数据
                 */
                label = new Label(2, i, (i % 2 == 0 ? "男" : "女"));
                sheet.addCell(label);
            }
            /**
             * 将数据写入到指定的工作簿
             */
            workbook.write();
            /**
             * 关闭流
             */
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
